package cn.pso.nspsofs;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.slf4j.impl.StaticLoggerBinder;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.List;

import static org.slf4j.Logger.ROOT_LOGGER_NAME;

public class RequestHolder {
    public static RestTemplate getInstance() {
        return RestTemplateHolder.instance;
    }

    private static class RestTemplateHolder {
        //        private static final RestTemplate instance = new RestTemplate();
        private static final RestTemplate instance = buildRestTemplate();

        private static RestTemplate buildRestTemplate() {
            // 设置日志等级
            LoggerContext loggerFactory = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();
            loggerFactory.getLogger(ROOT_LOGGER_NAME).setLevel(Level.INFO);

            FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
            List<MediaType> supportedMediaTypes = new ArrayList<>();
            supportedMediaTypes.add(MediaType.APPLICATION_JSON);
            supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
            supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
            supportedMediaTypes.add(MediaType.APPLICATION_PDF);
            supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_XML);
            supportedMediaTypes.add(MediaType.IMAGE_GIF);
            supportedMediaTypes.add(MediaType.IMAGE_JPEG);
            supportedMediaTypes.add(MediaType.IMAGE_PNG);
            supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
            supportedMediaTypes.add(MediaType.TEXT_HTML);
            supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
            supportedMediaTypes.add(MediaType.TEXT_PLAIN);
            supportedMediaTypes.add(MediaType.TEXT_XML);
            fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
            return new RestTemplateBuilder()
                    .additionalMessageConverters(fastJsonHttpMessageConverter)
                    .build();
        }
    }
}
